邁入倒數的五天了,轉眼間發現30天的挑戰賽其實過得非常快,許多內容皆在轉眼間。而最後一篇章節我所要講的主題稱為布朗尼(brownie),布朗尼作為餐點的最後甜點,小巧精緻卻不搶主食風采,雖迷你卻能讓你在舌尖上轉圜那熟稔的味道。
Numpy 這個主題非常廣泛:數據集可能來自非常不同的來源和非常不同的格式,包括文檔的集合,圖像的集合,聲音片段的集合,數值測量的集合,甚至其他任何東西的集合。儘管數據集有著超出想像的異質性,我們還是可以將所有的數據抽象成為數值組成的數組。
因此,有效的存儲和處理數值數組對於數據科學來說是最根本的能力。我們接下來會討論Python中具備這樣強大功能的特殊工具:NumPy和Pandas (Numerical Python),它提供了強大的接口供我們存儲和操作非稀疏數據集合。在某些情況下,NumPy的數組表現得就像Python內建的列表,但是NumPy數組在存儲和操作大量數據集合的時候提供了有效得多的功能和性能。 NumPy數組是Python的數據科學領域工具鏈的核心,很多其他的工具都是在它的基礎上構建的,因此無論你感興趣的是數據科學的哪個領域,NumPy都值得你花時間進行鑽研。
我們可以使用np.array
來將一個Python列表變成一個數組,記住和Python列表不同,NumPy數組只能含有同一種類型的數據。如果類型不一樣,NumPy會嘗試向上擴展類型(下面例子中會將整數向上擴展為浮點數):
import numpy as np
np.array([1, 4, 2, 5, 3]) #1D
np.array([[1,2,3], [4,5,6]]) #2D
np.array([[[1,2,3], [5,6,7]], [[1,2,3], [5,6,7]]]) #3D
print("ndim: ", arr.ndim) #數組的維度
print("shape:", arr.shape) #數組的形狀
print("size: ", arr.size) #數組的長度
print("itemsize:", arr.itemsize, "bytes")
print("nbytes:", arr.nbytes, "bytes")
使用NumPy的方法從頭創建數組會更加高效,特別對於大型數組來說。
np.zeros((3,4), dtype=float) # zeros 將數組元素都填充為0
np.ones((3,4), dtype=float) # ones 將數組元素都填充為1
np.full((3,4), 76) # full 將數組元素都填充為x
np.empty((3, 4))
np.eye(2) #自動完程同步矩陣列 1x1 2x2 3x3
np.arange(10) #From 0-10
np.arange(0, 20, 2) #From 0-20 step 2
np.linspace(0, 1, 5)
arr.T
np.dot(arr.T, arr)
有一個很有用的場景,就是當你需要繪製一個二維函數的圖像時。如果我們希望定義一個函數 ?=?(?,?) ,broadcasting 可以被用來計算二維平面上每個網格的數值:
%matplotlib inline
import matplotlib.pyplot as plt
# x和y都是0~5範圍平均分的50個點
x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 50)[:, np.newaxis]
z = np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)
plt.imshow(z, origin='lower', extent=[0, 5, 0, 5],cmap='viridis')
plt.colorbar();
今年沒組團,每一筆一字矢志不渝的獻身精神都是為歷史書寫下新頁,有空的話可以走走逛逛我們去年寫的文章。
Jerry 據說是個僅佔人口的 4% 人口的 INFP 理想主義者,總是從最壞的生活中尋找最好的一面,想方設法讓世界更好,內心的火焰和熱情可以光芒四射,畢業後把人生暫停了半年,緩下腳步的同時找了份跨領域工作。偶而散步、愛跟小動物玩耍。曾立過很多志,最近是希望當一個有夢想的人。
謝謝你的時間「訂閱,追蹤和留言」都是陪伴我走過 30 天鐵人賽的精神糧食。